home *** CD-ROM | disk | FTP | other *** search
/ SuperHack / SuperHack CD.bin / CODING / CPP / MANDEL2.ZIP / MANDEL2.CPP next >
C/C++ Source or Header  |  1993-09-23  |  2KB  |  94 lines

  1. #include <dos.h>
  2. #include <conio.h>
  3.  
  4. typedef unsigned char byte;
  5.  
  6. #define XPixels  320
  7. #define YPixels  200
  8. #define MaxIter  150
  9.  
  10. #define XMin   -2.3L  //-0.64L
  11. #define XMax    0.9L  //-0.44L
  12. #define YMin   -1.2L  // 0.55L
  13. #define YMax    1.2L  // 0.70L
  14. #define Escape  4.0L
  15.  
  16. const double DeltaX = (XMax - XMin) / (double)XPixels;
  17. const double DeltaY = (YMax - YMin) / (double)YPixels;
  18.  
  19.  
  20. double Xval[XPixels];
  21.  
  22. int main()
  23. {
  24.   double RowVal,X,Y,Xsq,Ysq,Xv;
  25.   int color,row,col;
  26.   union REGS r;
  27.  
  28.   //create pointer to beginning of video memory
  29.   byte far * gmem = (byte far*) (0xA0000000L);
  30.  
  31.   //set video mode to 320X200X256
  32.   r.x.ax=0x0013;
  33.   int86(0x10,&r,&r);
  34.  
  35.   //precalculate increments along Y-axis
  36.   Xval[0]=XMin;
  37.  
  38.   for(col=1;col<XPixels;++col)
  39.      Xval[col]=Xval[col-1]+DeltaX;
  40.  
  41.   RowVal=YMax;
  42.  
  43.   //calculate and display Mandelbrot set
  44.   for(row=0;row<YPixels;++row)
  45.      {
  46.      for(col=0;col<XPixels;++col)
  47.         {
  48.         X=Y=Xsq=Ysq=0.0L;
  49.         Xv=Xval[col];
  50.         color=0;
  51.  
  52.         //iterate equation
  53.         while(color<MaxIter)
  54.            {
  55.            //calculate squares
  56.            Xsq=X*X;
  57.            Ysq=Y*Y;
  58.  
  59.            //if Z > Escape, jump out
  60.            if((Xsq+Ysq)>=Escape)
  61.               break;
  62.  
  63.            //calculate next Z
  64.            Y*=X;
  65.            Y+=Y+RowVal;
  66.            X=Xsq-Ysq+Xv;
  67.  
  68.            //increment iteration count
  69.            ++color;
  70.            }
  71.  
  72.         //plot pixel
  73.         if(color==MaxIter)
  74.            *gmem=0;
  75.         else
  76.            *gmem=(color&15) +1;
  77.  
  78.         //move to next pixel
  79.         ++gmem;
  80.         }
  81.  
  82.      RowVal-=DeltaY;
  83.      }
  84.  
  85.   sound(200);
  86.   delay(250);
  87.   nosound();
  88.   while(!kbhit());
  89.  
  90.   r.x.ax=0x0003;
  91.   int86(0x10,&r,&r);
  92.  
  93.   return 0;
  94. }